<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.10.0" />
<title>Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main API documentation</title>
<meta name="description" content="This is an example of a panel (type=&#34;static&#34;), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/ir-black.min.css" crossorigin>
<style>
:root {
--highlight-color: #202;
}
html {
scrollbar-face-color: #646464;
scrollbar-base-color: #646464;
scrollbar-3dlight-color: #646464;
scrollbar-highlight-color: #646464;
scrollbar-track-color: #000;
scrollbar-arrow-color: #000;
scrollbar-shadow-color: #646464;
scrollbar-dark-shadow-color: #646464;
}
::-webkit-scrollbar { width: 14px; height: 3px;}
::-webkit-scrollbar-button {
background-color: #000;
height: 3px;}
::-webkit-scrollbar-track {
background-color: #646464;}
::-webkit-scrollbar-track-piece { background-color: #000;}
::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 7px;}
::-webkit-scrollbar-corner { background-color: #646464;}
::-webkit-resizer { background-color: #666;}
.flex {
display: flex !important;
}
body {
line-height: 1.5em;
color: #fff;
background-color: #1e1e1e;
font: 14px/1.5 Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
}
#content {
padding: 20px;
}
#sidebar {
padding: 30px;
overflow: hidden;
}
#sidebar>*:last-child {
margin-bottom: 2cm;
}
.http-server-breadcrumbs {
font-size: 130%;
margin: 0 0 15px 0;
}
#footer {
font-size: .75em;
padding: 5px 30px;
border-top: 1px solid #fff;
text-align: right;
}
#footer p {
margin: 0 0 0 1em;
display: inline-block;
}
#footer p:last-child {
margin-right: 30px;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: 300;
color: #fff;
}
h1 {
font-size: 2.5em;
line-height: 1.1em;
}
h2 {
font-size: 1.75em;
margin: 1em 0 .50em 0;
}
h3 {
font-size: 1.4em;
margin: 25px 0 10px 0;
}
h4 {
margin: 0;
font-size: 105%;
}
h1:target,
h2:target,
h3:target,
h4:target,
h5:target,
h6:target {
background: #1e1e1e;
padding: 0.2em 0;
}
a {
color: #8fd6fc;
text-decoration: none;
transition: color .3s ease-in-out;
}
a:hover {
color: #00a4fc;
}
.title code {
font-weight: bold;
}
h2[id^="header-"] {
margin-top: 2em;
}
.ident {
color: #f6fc85;
}
strong {
color: #8fd6fc;
}
pre code {
background: transparent;
font-size: .8em;
line-height: 1.4em;
}
code {
background: rgba(255, 255, 255, 0.1);
padding: 1px 4px;
overflow-wrap: break-word;
}
h1 code {
background: transparent
}
pre {
background: transparent;
border: 0;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
margin: 1em 0;
padding: 1ex;
}
#http-server-module-list {
display: flex;
flex-flow: column;
}
#http-server-module-list div {
display: flex;
}
#http-server-module-list dt {
min-width: 10%;
}
#http-server-module-list p {
margin-top: 0;
}
.toc ul,
#index {
list-style-type: none;
margin: 0;
padding: 0;
}
#index code {
background: transparent;
}
#index h3 {
border-bottom: 1px solid #ddd;
}
#index ul {
padding: 0;
}
#index h4 {
margin-top: .6em;
font-weight: bold;
}
/* Make TOC lists have 2+ columns when viewport is wide enough.
Assuming ~20-character identifiers and ~30% wide sidebar. */
@media (min-width: 200ex) {
#index .two-column {
column-count: 2
}
}
@media (min-width: 300ex) {
#index .two-column {
column-count: 3
}
}
dl {
margin-bottom: 2em;
}
dl dl:last-child {
margin-bottom: 4em;
}
dd {
margin: 0 0 1em 3em;
}
#header-classes+dl>dd {
margin-bottom: 3em;
}
dd dd {
margin-left: 2em;
}
dd p {
margin: 10px 0;
}
.name {
background: #000;
font-weight: bold;
font-size: .85em;
padding: 5px 10px;
display: inline-block;
min-width: 40%;
}
.name:hover {
background: #0b0b0b;
}
dt:target .name {
background: var(--highlight-color);
}
.name>span:first-child {
white-space: nowrap;
}
.name.class>span:nth-child(2) {
margin-left: .4em;
}
.inherited {
color: #999;
border-left: 5px solid #eee;
padding-left: 1em;
}
.inheritance em {
font-style: normal;
font-weight: bold;
}
.pydefname {
color: #f90;
}
/* Docstrings titles, e.g. in numpydoc format */
.desc h2 {
font-weight: 400;
font-size: 1.25em;
}
.desc h3 {
font-size: 1em;
}
.desc dt code {
background: inherit;
/* Don't grey-back parameters */
}
.source summary,
.git-link-div {
color: #666;
text-align: right;
font-weight: 400;
font-size: .8em;
text-transform: uppercase;
}
.source summary>* {
white-space: nowrap;
cursor: pointer;
}
.git-link {
color: inherit;
margin-left: 1em;
}
.source pre {
max-height: 500px;
overflow: auto;
margin: 0;
}
.source pre code {
font-size: 12px;
overflow: visible;
}
.hlist {
list-style: none;
}
.hlist li {
display: inline;
}
.hlist li:after {
content: ',\2002';
}
.hlist li:last-child:after {
content: none;
}
.hlist .hlist {
display: inline;
padding-left: 1em;
}
img {
max-width: 100%;
}
td {
padding: 0 .5em;
}
.admonition {
padding: .1em .5em;
margin-bottom: 1em;
}
.admonition-title {
font-weight: bold;
}
.admonition.note,
.admonition.info,
.admonition.important {
background: #00a;
}
.admonition.todo,
.admonition.versionadded,
.admonition.tip,
.admonition.hint {
background: #050;
}
.admonition.warning,
.admonition.versionchanged,
.admonition.deprecated {
background: #ec0;
}
.admonition.error,
.admonition.danger,
.admonition.caution {
background: #c20010;
}
p {
color: #fff;
}
</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main</code></h1>
</header>
<section id="section-intro">
<p>This is an example of a panel (type="static"), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then check the Plugin example!</p>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;
This is an example of a panel (type=&#34;static&#34;), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then check the Plugin example!
&#34;&#34;&#34;


from plugins.plugin import PluginInformation
from src.logger import print

PluginInfo = PluginInformation(
    name=&#34;Settings&#34;, # This needs to match the folder name under plugins (this would mean plugins\Panel\main.py)
    description=&#34;Global settings.&#34;,
    version=&#34;0.1&#34;,
    author=&#34;Tumppi066&#34;,
    url=&#34;https://github.com/Tumppi066/Euro-Truck-Simulator-2-Lane-Assist&#34;,
    type=&#34;static&#34; # = Panel
)

import tkinter as tk
from tkinter import ttk
import src.helpers as helpers
import src.mainUI as mainUI
import src.variables as variables
import src.settings as settings
import os
import win32gui, win32con

global crashreportvar

class UI():
    try: # The panel is in a try loop so that the logger can log errors if they occur
        
        def __init__(self, master) -&gt; None:
            self.master = master # &#34;master&#34; is the mainUI window
            self.exampleFunction()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        def reinstall(self):
            for plugin in settings.GetSettings(&#34;Plugins&#34;, &#34;Installed&#34;):
                settings.RemoveFromList(&#34;Plugins&#34;, &#34;Installed&#34;, plugin)
            
            from tkinter import messagebox
            messagebox.showinfo(&#34;Reinstall&#34;, &#34;All plugins will be reinstalled on next startup. The application will now close.&#34;)
            mainUI.quit()
            
        def exampleFunction(self):
            global crashreportvar
            
            try:
                self.root.destroy() # Load the UI each time this plugin is called
            except: pass

            self.root = tk.Canvas(self.master, width=600, height=600, border=0, highlightthickness=0)
            self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
            self.root.pack_propagate(0)
            
            helpers.MakeLabel(self.root, &#34;Categories&#34;, 0,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
            helpers.MakeButton(self.root, &#34;Translation Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.DeepTranslator.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;UI Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.TabSettings.main&#34;), 6,1, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;Themes&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.ThemeManager.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
            
            helpers.MakeLabel(self.root, &#34;Global Settings&#34;, 2,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
            self.updateRate = helpers.MakeComboEntry(self.root, &#34;UI Update Every x Frames&#34;, &#34;User Interface&#34;, &#34;updateRate&#34;, 1,0, value=4, labelwidth=25, width=25, autoplace=True)
            self.awareness = helpers.MakeComboEntry(self.root, &#34;DPI mode (0/1/2)&#34;, &#34;User Interface&#34;, &#34;DPIAwareness&#34;, 2,0, value=0, labelwidth=25, width=25, autoplace=True)
            
            self.printDebug = helpers.MakeCheckButton(self.root, &#34;Print Debug&#34;, &#34;logger&#34;, &#34;debug&#34;, 3,0, width=20, autoplace=True)
            helpers.MakeCheckButton(self.root, &#34;Hide Console&#34;, &#34;User Interface&#34;, &#34;hide_console&#34;, 3,1, width=20, autoplace=True)
            self.crashreport = helpers.MakeCheckButton(self.root, &#34;Send crash data&#34;, &#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, 4,0, width=20, autoplace=True)

            
            helpers.MakeButton(self.root, &#34;Save &amp; Reload&#34;, lambda: self.save(), 7,0, padx=30, pady=10, width=20, autoplace=True)
            
            
            helpers.MakeButton(self.root, &#34;Reinstall plugins&#34;, lambda: self.reinstall(), 6,0, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;Reload Plugins&#34;, lambda: variables.ReloadAllPlugins(), 7,1, padx=30, pady=10, width=20, autoplace=True)

            self.root.pack(anchor=&#34;center&#34;, expand=False)
            self.root.update()
        
        def save(self): # This function is called when the user presses the &#34;Save &amp; Quit&#34; button
            settings.CreateSettings(&#34;User Interface&#34;, &#34;updateRate&#34;, self.updateRate.get())
            if settings.GetSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;) != self.awareness.get():
                settings.CreateSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;, self.awareness.get())
                tk.messagebox.showinfo(&#34;Restart required&#34;, &#34;You need to restart the app for the DPI mode to take effect.&#34;)
            # settings.CreateSettings(&#34;Plugins&#34;, &#34;Ignore&#34;, self.ignore.get())
            if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == False:
                win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_RESTORE)
            if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == True:
                if variables.CONSOLENAME == None:
                    window_found = False
                    target_text = &#34;/venv/Scripts/python&#34;
                    top_windows = []
                    win32gui.EnumWindows(lambda hwnd, top_windows: top_windows.append((hwnd, win32gui.GetWindowText(hwnd))), top_windows)
                    for hwnd, window_text in top_windows:
                        if target_text in window_text:
                            window_found = True
                            variables.CONSOLENAME = hwnd
                            break
                    if window_found == False:
                        print(&#34;Console window not found, unable to hide!&#34;)
                    else:
                        print(f&#34;Console Name: {window_text}, Console ID: {hwnd}&#34;)
                        win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
                else:
                    win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
            print(self.crashreport.get())
            if self.crashreport.get():
                CrashReportWindow = tk.messagebox.askokcancel(&#34;CrashReporter&#34;, &#34;This will send anonymous crash report data to the developers.\nThis can help improve the app and fix any bugs that are found.\n This will send only the error that caused the app to crash.\n Your name and person info will be censored.\n\nDo you want to continue?&#34;, icon=&#34;warning&#34;) 
                if CrashReportWindow == True:
                    settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, True)
                else: 
                    settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
            else:
                settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
            
            variables.RELOAD = True
        
        def update(self, data): # When the panel is open this function is called each frame 
            self.root.update()
    
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI"><code class="flex name class">
<span>class <span class="ident">UI</span></span>
<span>(</span><span>master)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class UI():
    try: # The panel is in a try loop so that the logger can log errors if they occur
        
        def __init__(self, master) -&gt; None:
            self.master = master # &#34;master&#34; is the mainUI window
            self.exampleFunction()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        def reinstall(self):
            for plugin in settings.GetSettings(&#34;Plugins&#34;, &#34;Installed&#34;):
                settings.RemoveFromList(&#34;Plugins&#34;, &#34;Installed&#34;, plugin)
            
            from tkinter import messagebox
            messagebox.showinfo(&#34;Reinstall&#34;, &#34;All plugins will be reinstalled on next startup. The application will now close.&#34;)
            mainUI.quit()
            
        def exampleFunction(self):
            global crashreportvar
            
            try:
                self.root.destroy() # Load the UI each time this plugin is called
            except: pass

            self.root = tk.Canvas(self.master, width=600, height=600, border=0, highlightthickness=0)
            self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
            self.root.pack_propagate(0)
            
            helpers.MakeLabel(self.root, &#34;Categories&#34;, 0,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
            helpers.MakeButton(self.root, &#34;Translation Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.DeepTranslator.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;UI Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.TabSettings.main&#34;), 6,1, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;Themes&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.ThemeManager.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
            
            helpers.MakeLabel(self.root, &#34;Global Settings&#34;, 2,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
            self.updateRate = helpers.MakeComboEntry(self.root, &#34;UI Update Every x Frames&#34;, &#34;User Interface&#34;, &#34;updateRate&#34;, 1,0, value=4, labelwidth=25, width=25, autoplace=True)
            self.awareness = helpers.MakeComboEntry(self.root, &#34;DPI mode (0/1/2)&#34;, &#34;User Interface&#34;, &#34;DPIAwareness&#34;, 2,0, value=0, labelwidth=25, width=25, autoplace=True)
            
            self.printDebug = helpers.MakeCheckButton(self.root, &#34;Print Debug&#34;, &#34;logger&#34;, &#34;debug&#34;, 3,0, width=20, autoplace=True)
            helpers.MakeCheckButton(self.root, &#34;Hide Console&#34;, &#34;User Interface&#34;, &#34;hide_console&#34;, 3,1, width=20, autoplace=True)
            self.crashreport = helpers.MakeCheckButton(self.root, &#34;Send crash data&#34;, &#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, 4,0, width=20, autoplace=True)

            
            helpers.MakeButton(self.root, &#34;Save &amp; Reload&#34;, lambda: self.save(), 7,0, padx=30, pady=10, width=20, autoplace=True)
            
            
            helpers.MakeButton(self.root, &#34;Reinstall plugins&#34;, lambda: self.reinstall(), 6,0, padx=30, pady=10, width=20, autoplace=True)
            helpers.MakeButton(self.root, &#34;Reload Plugins&#34;, lambda: variables.ReloadAllPlugins(), 7,1, padx=30, pady=10, width=20, autoplace=True)

            self.root.pack(anchor=&#34;center&#34;, expand=False)
            self.root.update()
        
        def save(self): # This function is called when the user presses the &#34;Save &amp; Quit&#34; button
            settings.CreateSettings(&#34;User Interface&#34;, &#34;updateRate&#34;, self.updateRate.get())
            if settings.GetSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;) != self.awareness.get():
                settings.CreateSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;, self.awareness.get())
                tk.messagebox.showinfo(&#34;Restart required&#34;, &#34;You need to restart the app for the DPI mode to take effect.&#34;)
            # settings.CreateSettings(&#34;Plugins&#34;, &#34;Ignore&#34;, self.ignore.get())
            if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == False:
                win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_RESTORE)
            if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == True:
                if variables.CONSOLENAME == None:
                    window_found = False
                    target_text = &#34;/venv/Scripts/python&#34;
                    top_windows = []
                    win32gui.EnumWindows(lambda hwnd, top_windows: top_windows.append((hwnd, win32gui.GetWindowText(hwnd))), top_windows)
                    for hwnd, window_text in top_windows:
                        if target_text in window_text:
                            window_found = True
                            variables.CONSOLENAME = hwnd
                            break
                    if window_found == False:
                        print(&#34;Console window not found, unable to hide!&#34;)
                    else:
                        print(f&#34;Console Name: {window_text}, Console ID: {hwnd}&#34;)
                        win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
                else:
                    win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
            print(self.crashreport.get())
            if self.crashreport.get():
                CrashReportWindow = tk.messagebox.askokcancel(&#34;CrashReporter&#34;, &#34;This will send anonymous crash report data to the developers.\nThis can help improve the app and fix any bugs that are found.\n This will send only the error that caused the app to crash.\n Your name and person info will be censored.\n\nDo you want to continue?&#34;, icon=&#34;warning&#34;) 
                if CrashReportWindow == True:
                    settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, True)
                else: 
                    settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
            else:
                settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
            
            variables.RELOAD = True
        
        def update(self, data): # When the panel is open this function is called each frame 
            self.root.update()
    
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.destroy"><code class="name flex">
<span>def <span class="ident">destroy</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def destroy(self):
    self.done = True
    self.root.destroy()
    del self</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.exampleFunction"><code class="name flex">
<span>def <span class="ident">exampleFunction</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def exampleFunction(self):
    global crashreportvar
    
    try:
        self.root.destroy() # Load the UI each time this plugin is called
    except: pass

    self.root = tk.Canvas(self.master, width=600, height=600, border=0, highlightthickness=0)
    self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
    self.root.pack_propagate(0)
    
    helpers.MakeLabel(self.root, &#34;Categories&#34;, 0,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
    helpers.MakeButton(self.root, &#34;Translation Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.DeepTranslator.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
    helpers.MakeButton(self.root, &#34;UI Settings&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.TabSettings.main&#34;), 6,1, padx=30, pady=10, width=20, autoplace=True)
    helpers.MakeButton(self.root, &#34;Themes&#34;, lambda: mainUI.switchSelectedPlugin(&#34;plugins.ThemeManager.main&#34;), 5,0, padx=30, pady=10, width=20, autoplace=True)
    
    helpers.MakeLabel(self.root, &#34;Global Settings&#34;, 2,0, padx=30, pady=10, font=(&#34;Segoe UI&#34;, 16, &#34;bold&#34;), autoplace=True)
    self.updateRate = helpers.MakeComboEntry(self.root, &#34;UI Update Every x Frames&#34;, &#34;User Interface&#34;, &#34;updateRate&#34;, 1,0, value=4, labelwidth=25, width=25, autoplace=True)
    self.awareness = helpers.MakeComboEntry(self.root, &#34;DPI mode (0/1/2)&#34;, &#34;User Interface&#34;, &#34;DPIAwareness&#34;, 2,0, value=0, labelwidth=25, width=25, autoplace=True)
    
    self.printDebug = helpers.MakeCheckButton(self.root, &#34;Print Debug&#34;, &#34;logger&#34;, &#34;debug&#34;, 3,0, width=20, autoplace=True)
    helpers.MakeCheckButton(self.root, &#34;Hide Console&#34;, &#34;User Interface&#34;, &#34;hide_console&#34;, 3,1, width=20, autoplace=True)
    self.crashreport = helpers.MakeCheckButton(self.root, &#34;Send crash data&#34;, &#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, 4,0, width=20, autoplace=True)

    
    helpers.MakeButton(self.root, &#34;Save &amp; Reload&#34;, lambda: self.save(), 7,0, padx=30, pady=10, width=20, autoplace=True)
    
    
    helpers.MakeButton(self.root, &#34;Reinstall plugins&#34;, lambda: self.reinstall(), 6,0, padx=30, pady=10, width=20, autoplace=True)
    helpers.MakeButton(self.root, &#34;Reload Plugins&#34;, lambda: variables.ReloadAllPlugins(), 7,1, padx=30, pady=10, width=20, autoplace=True)

    self.root.pack(anchor=&#34;center&#34;, expand=False)
    self.root.update()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.reinstall"><code class="name flex">
<span>def <span class="ident">reinstall</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def reinstall(self):
    for plugin in settings.GetSettings(&#34;Plugins&#34;, &#34;Installed&#34;):
        settings.RemoveFromList(&#34;Plugins&#34;, &#34;Installed&#34;, plugin)
    
    from tkinter import messagebox
    messagebox.showinfo(&#34;Reinstall&#34;, &#34;All plugins will be reinstalled on next startup. The application will now close.&#34;)
    mainUI.quit()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.save"><code class="name flex">
<span>def <span class="ident">save</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def save(self): # This function is called when the user presses the &#34;Save &amp; Quit&#34; button
    settings.CreateSettings(&#34;User Interface&#34;, &#34;updateRate&#34;, self.updateRate.get())
    if settings.GetSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;) != self.awareness.get():
        settings.CreateSettings(&#34;User Interface&#34;, &#34;DPIAwareness&#34;, self.awareness.get())
        tk.messagebox.showinfo(&#34;Restart required&#34;, &#34;You need to restart the app for the DPI mode to take effect.&#34;)
    # settings.CreateSettings(&#34;Plugins&#34;, &#34;Ignore&#34;, self.ignore.get())
    if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == False:
        win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_RESTORE)
    if settings.GetSettings(&#34;User Interface&#34;, &#34;hide_console&#34;) == True:
        if variables.CONSOLENAME == None:
            window_found = False
            target_text = &#34;/venv/Scripts/python&#34;
            top_windows = []
            win32gui.EnumWindows(lambda hwnd, top_windows: top_windows.append((hwnd, win32gui.GetWindowText(hwnd))), top_windows)
            for hwnd, window_text in top_windows:
                if target_text in window_text:
                    window_found = True
                    variables.CONSOLENAME = hwnd
                    break
            if window_found == False:
                print(&#34;Console window not found, unable to hide!&#34;)
            else:
                print(f&#34;Console Name: {window_text}, Console ID: {hwnd}&#34;)
                win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
        else:
            win32gui.ShowWindow(variables.CONSOLENAME, win32con.SW_HIDE)
    print(self.crashreport.get())
    if self.crashreport.get():
        CrashReportWindow = tk.messagebox.askokcancel(&#34;CrashReporter&#34;, &#34;This will send anonymous crash report data to the developers.\nThis can help improve the app and fix any bugs that are found.\n This will send only the error that caused the app to crash.\n Your name and person info will be censored.\n\nDo you want to continue?&#34;, icon=&#34;warning&#34;) 
        if CrashReportWindow == True:
            settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, True)
        else: 
            settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
    else:
        settings.CreateSettings(&#34;CrashReporter&#34;, &#34;AllowCrashReports&#34;, False)
    
    variables.RELOAD = True</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.update"><code class="name flex">
<span>def <span class="ident">update</span></span>(<span>self, data)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def update(self, data): # When the panel is open this function is called each frame 
    self.root.update()</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings" href="index.html">Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI">UI</a></code></h4>
<ul class="">
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.destroy" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.destroy">destroy</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.exampleFunction" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.exampleFunction">exampleFunction</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.reinstall" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.reinstall">reinstall</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.save" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.save">save</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.update" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.Settings.main.UI.update">update</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.10.0</a>.</p>
</footer>
</body>
</html>